// A manual UMD build of Fscreen: https://github.com/rafrex/fscreen

;(function (global) {
  'use strict'

  var key = {
    fullscreenEnabled: 0,
    fullscreenElement: 1,
    requestFullscreen: 2,
    exitFullscreen: 3,
    fullscreenchange: 4,
    fullscreenerror: 5
  }

  var webkit = [
    'webkitFullscreenEnabled',
    'webkitFullscreenElement',
    'webkitRequestFullscreen',
    'webkitExitFullscreen',
    'webkitfullscreenchange',
    'webkitfullscreenerror'
  ]

  var moz = [
    'mozFullScreenEnabled',
    'mozFullScreenElement',
    'mozRequestFullScreen',
    'mozCancelFullScreen',
    'mozfullscreenchange',
    'mozfullscreenerror'
  ]

  var ms = [
    'msFullscreenEnabled',
    'msFullscreenElement',
    'msRequestFullscreen',
    'msExitFullscreen',
    'MSFullscreenChange',
    'MSFullscreenError'
  ]

  // so it doesn't throw if no window or document
  var doc =
    typeof window !== 'undefined' && typeof window.document !== 'undefined'
      ? window.document
      : {}

  var vendor =
    ('fullscreenEnabled' in doc && Object.keys(key)) ||
    (webkit[0] in doc && webkit) ||
    (moz[0] in doc && moz) ||
    (ms[0] in doc && ms) ||
    []

  var fscreen = {
    requestFullscreen: function requestFullscreen(element) {
      return element[vendor[key.requestFullscreen]]()
    },
    requestFullscreenFunction: function requestFullscreenFunction(element) {
      return element[vendor[key.requestFullscreen]]
    },
    get exitFullscreen() {
      return doc[vendor[key.exitFullscreen]].bind(doc)
    },
    addEventListener: function addEventListener(type, handler, options) {
      return doc.addEventListener(vendor[key[type]], handler, options)
    },
    removeEventListener: function removeEventListener(type, handler) {
      return doc.removeEventListener(vendor[key[type]], handler)
    },
    get fullscreenEnabled() {
      return Boolean(doc[vendor[key.fullscreenEnabled]])
    },
    set fullscreenEnabled(val) {},
    get fullscreenElement() {
      return doc[vendor[key.fullscreenElement]]
    },
    set fullscreenElement(val) {},
    get onfullscreenchange() {
      return doc[('on' + vendor[key.fullscreenchange]).toLowerCase()]
    },
    set onfullscreenchange(handler) {
      return (doc[('on' + vendor[key.fullscreenchange]).toLowerCase()] =
        handler)
    },
    get onfullscreenerror() {
      return doc[('on' + vendor[key.fullscreenerror]).toLowerCase()]
    },
    set onfullscreenerror(handler) {
      return (doc[('on' + vendor[key.fullscreenerror]).toLowerCase()] = handler)
    }
  }

  global.fscreen = fscreen
})(window)
